패럿 가상 머신
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
패럿 가상 머신은 다양한 프로그래밍 언어를 지원하기 위해 설계된 가상 머신으로, "Parrot"이라는 이름은 만우절 농담에서 유래되었다. 2009년 버전 1.0이 출시되었으며, 2014년에는 패럿 재단이 해산되었다. 패럿은 클라이언트 언어 호스팅 및 언어 간 상호 운용을 목표로 하며, 정적 및 동적 형식 언어를 모두 지원한다. 레지스터 기반 아키텍처를 사용하며, 클로저와 연속체를 포함한 함수형 프로그래밍 기능을 지원한다. 패럿은 바이트코드, Parrot 어셈블리 언어(PASM), Parrot 중간 표현(PIR) 등 세 가지 형태의 코드를 가지며, 다형성 컨테이너(PMC)를 통해 클라이언트 언어의 타입을 확장한다. 라쿠, Lua, Winxed 등의 언어를 지원하며, 다양한 언어를 패럿 어셈블리 언어로 컴파일하려는 시도가 있었다. 또한, 아파치 웹 서버의 모듈인 mod_parrot을 제공한다. 패럿은 "하나의 바이트코드는 모든 것을 지배한다"는 캐치프레이즈를 사용하며, Artistic License 2.0에 따라 배포된다.
더 읽어볼만한 페이지
- 아티스틱 라이선스 소프트웨어 - 펄
펄은 래리 월이 개발한 텍스트 조작에 강점을 가진 다목적 프로그래밍 언어이며, 1987년 펄 1.0이 처음 공개된 이후 여러 버전 업데이트를 거쳐 객체 지향 프로그래밍과 유니코드 지원 기능을 추가했고, 현재 펄 5가 널리 사용되며 CPAN을 통해 방대한 모듈 생태계를 제공한다. - 아티스틱 라이선스 소프트웨어 - Npm (소프트웨어)
npm은 자바스크립트 패키지 관리자이며, 프로젝트 종속성 관리를 위해 명령줄 인터페이스를 제공하고, npm 레지스트리를 통해 다양한 자바스크립트 모듈을 제공하지만 보안 문제와 삭제 사건으로 논란이 있었다. - 가상 머신 - V8 (자바스크립트 엔진)
V8은 구글이 개발한 오픈 소스 자바스크립트 엔진으로, 자바스크립트 코드 실행 속도 향상을 위해 여러 컴파일러를 거쳐 크롬, 노드.js 등에서 활용된다. - 가상 머신 - X86 가상화
X86 가상화는 x86 아키텍처 기반 시스템에서 가상 머신을 구현하는 기술로, 소프트웨어 기반 가상화와 하드웨어 지원 가상화로 나뉘며, CPU 제조사의 가상화 확장 기술을 활용하여 가상 머신의 성능을 향상시킨다. - 펄 - 래리 월
래리 월은 펄 프로그래밍 언어 창시자이자 rn, patch 개발자이며, 유니시스 근무 중 펄을 개발하고 《프로그래밍 펄》을 저술하는 등 펄 커뮤니티에 큰 영향을 미쳤고, 자유 소프트웨어 발전상 수상 및 펄 프로젝트의 자비로운 종신 독재자로 활동 중인 컴퓨터 과학자이자 기독교 신자이다. - 펄 - 펄 쿡북
펄 쿡북은 펄 프로그래밍에 대한 실용적인 해법을 요리책 형식으로 제시하는 참고서로, 1998년과 2003년에 각각 1판과 2판이 출판되어 다양한 평가에서 찬사를 받았다.
패럿 가상 머신 - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
![]() | |
개발자 | 패럿 재단 |
최신 버전 | 8.1.0 |
최신 버전 출시일 | 2016년 2월 16일 |
지원 중단 여부 | 예 |
대체 기술 | MoarVM (라쿠용) |
운영 체제 | 크로스 플랫폼 |
프로그래밍 언어 | C |
종류 | 가상 머신 |
라이선스 | Artistic License 2.0 |
웹사이트 | 공식 웹사이트 |
2. 역사
"Parrot"이라는 이름은 만우절 농담에서 유래되었는데, 파이썬과 펄을 통합하는 가상의 언어 "Parrot"을 발표한 것에서 비롯되었다.[5][6] 이후 이 이름은 라쿠, 파이썬 및 기타 프로그래밍 언어를 지원하는 것을 목표로 하는 Parrot 프로젝트(초기에는 라쿠 개발 노력의 일부)에 채택되었다.
패럿 가상 머신은 클라이언트 언어를 호스팅하고 언어 간의 상호 운용을 가능하게 하는 것을 목표로 한다. 이러한 목표를 달성하기 위해서는 고급 개념, 데이터 및 자료 구조를 언어 간에 매핑하는 것을 포함하여 여러 과제가 존재한다.
2009년3월 17일에는 "하루 타츠"라는 코드네임으로 버전 1.0이 출시되었다.
2005년 말까지 댄 수갈스키가 Parrot의 수석 설계자이자 최고 아키텍트였다. 2006년 중반에는 오랜 펄, 리눅스 커널, C++ 해커였던 칩 살젠버그가 이 역할을 맡았고, 이후 수석 개발자가 되었다. 앨리슨 랜달은 Punie의 수석 개발자이자 Parrot 컴파일러 도구의 최고 아키텍트였으며, 2010년 10월 중순에 사임하고 크리스토프 오토가 새로운 최고 아키텍트가 되었다.[10]
2014년 Parrot 재단이 해산되었다.[7] 이 재단은 2008년에 Parrot 프로젝트의 저작권 및 상표를 보유하고, 프로그래밍 언어 구현과 핵심 코드베이스 개발을 추진하며, Parrot 커뮤니티를 성장시키고 다른 언어 커뮤니티와 교류하기 위해 설립되었다.[8]
과거 설계 결정은 Parrot 저장소에 있는 Parrot 설계 문서(PDD) 형태로 문서화되어 있다.[9]
3. 특징
3. 1. 정적 및 동적 언어 지원
정적 및 동적 형식 언어의 차이점은 패럿의 설계를 동기 부여했다.[1] 자바 가상 머신 및 .NET 플랫폼의 공용 언어 런타임과 같은 현재 널리 사용되는 가상 머신은 정적으로 형식화된 언어를 위해 설계되었지만, 패럿이 대상으로 하는 언어는 동적으로 형식화된다.[1]
정적 타입과 동적 타입 언어의 서로 다른 특성이 패럿의 개발 동기가 되었다.[3] 현재 자바 가상 머신이나 공용 언어 런타임(CLR) 등과 같이 인기 있는 가상 머신은 정적으로 타입이 지정된 언어를 위해 개발되었지만, 패럿이 대상으로 하는 언어는 동적 타입 언어이다.[3]
3. 2. 레지스터 기반 아키텍처
패럿은 대부분의 하드웨어 CPU와 같이 레지스터 기반이다. 이는 스택 기반인 대부분의 가상 머신과 달리 하드웨어 설계와 더 유사하여 컴파일러 최적화를 통해 기계어에 더 가까운 속도로 실행할 수 있다는 장점을 가진다. 패럿은 다음 네 가지 종류의 레지스터를 제공한다.
정적 및 동적 형식 언어의 차이점은 패럿의 설계를 동기 부여했다. 자바 가상 머신 및 .NET 플랫폼의 공용 언어 런타임과 같은 현재 널리 사용되는 가상 머신은 정적으로 형식화된 언어를 위해 설계되었지만, 패럿이 대상으로 하는 언어는 동적으로 형식화된다.
3. 3. 함수형 프로그래밍 개념 지원
패럿은 클로저와 연속체 등 다양한 함수형 프로그래밍 기능을 지원하며, 이는 예외 처리 및 스레딩과 함께 사용할 때 정확하고 이식성 있게 구현하기 어려울 수 있다. 이러한 문제를 가상 머신 수준에서 해결함으로써 개별 클라이언트 언어에서 이 문제를 해결할 필요가 없다.
3. 4. 컴파일러 도구
패럿은 컴파일러 작성 도구[11] 모음을 제공하며, 여기에는 파서 문법 엔진(PGE)이 포함된다. PGE는 재귀적 하향식 파서와 연산자 우선순위 파서를 모두 표현할 수 있는 하이브리드 파서 생성기로, 단일 문법 내에서 두 파서 간의 자유로운 전환을 허용한다. PGE는 트리 문법 엔진(TGE)으로 공급되어 PGE가 생성한 파스 트리를 최적화하고 궁극적으로 코드 생성을 위해 추가 변환을 수행한다.
4. 내부 구조
패럿은 세 가지 형태의 프로그램 코드를 가진다.
- '''바이트코드'''[14]는 바이너리 형식이며 패럿에 의해 기본적으로 해석된다. 바이트코드는 일반적으로 ".pbc" 파일 확장자를 가진 파일에 저장된다.
- '''Parrot 어셈블리 언어'''(PASM)는 컴파일러가 바이트코드로 컴파일하는 저수준 언어이다. PASM 코드는 일반적으로 ".pasm" 파일 확장자를 가진 파일에 저장된다.
- '''Parrot 중간 표현'''(PIR[15])은 PASM보다 약간 더 높은 수준의 언어이며, 바이트코드로 컴파일된다. 이는 언어 구현의 주요 대상이다. PIR은 패럿의 루틴 간 호출 규칙을 투명하게 관리하고, 개선된 구문, 레지스터 할당 등을 제공한다. PIR 코드는 일반적으로 ".pir" 파일 확장자를 가진 파일에 저장된다.
바이트코드(Parrot Bytecode, PBC)는 패럿에 의해 네이티브로 해석되는 기계어이며, 다른 두 코드, 즉 PASM과 PIR은 '''IMCC'''(구 버전) 또는 '''PIRC'''(신 버전)에 의해 바이트코드로 컴파일되는 중간 언어이다.
어셈블리 언어(Parrot Assembly Language, PASM)는 바이트코드와 거의 1:1로 대응하는 저수준 언어이다.
PIR을 사용하면, 패럿의 루틴 간의 호출 규약의 차이를 관리·흡수하고, 더 실질적으로 효율적인 명령어로의 변환(명령어 선택)[17]이나, 변수의 레지스터 할당 및 메모리 스필 등의 최적화를 개별적으로 구현하지 않고 패럿 (IMCC나 PIRC)에 맡길 수 있다.
4. 1. 다형성 컨테이너 (PMC)
'''다형성 컨테이너'''(PMC, '''P'''olymorphic '''M'''agic '''C'''ookie)는 클라이언트 언어가 처리하는 타입을 확장하기 위한 메커니즘이다.4. 2. 네이티브 코드로의 변환 (JIT 컴파일)
원래는 독자적인 JIT 컴파일러를 개발했지만, 2009년 버전 1.7.0에서 포기되었다. 향후에는 LLVM이나 nanojit 등의 기존 JIT 라이브러리를 이용하여 새로운 컴파일러를 준비할 것으로 예상된다.[18]5. 지원 언어
패럿 가상 머신을 대상으로 하는 가장 완벽한 언어 구현은 라쿠(당시에는 Rakudo Perl 6로 알려짐), Lua 및 "Winxed"라는 새로운 언어였다.[12] PHP, 파이썬, 루비를 비롯한 다양한 언어를 구현하려는 프로젝트가 시작되었으며, Befunge 및 "squaak" 튜토리얼 언어와 같은 난해하고 시연적인 언어도 포함되었다.[13] 그러나 이러한 프로젝트 중 어느 것도 각 언어의 주요 구현체가 되는 데 성공하지 못했다.[4]
다음은 잠재적으로 지원 가능한 언어 및 프로젝트 목록이다. 하지만 대부분 불완전하거나 실험적이거나 포기된 상태이다.
언어 | 상태 |
---|---|
APL | 불완전 |
BASIC | 불완전 |
Befunge | 불완전 |
Brainfuck | 불완전 |
Cola | 불완전 |
Forth | 불완전 |
Jako | 불완전 |
LISP | 불완전 |
M4 | 불완전 |
Miniperl | 불완전 |
Parakeet | 불완전 |
OpenComal | 불완전 |
PHP | 불완전 |
Plot | 불완전 |
Pheme | 불완전 |
Punie | 불완전 |
파이썬 | 불완전 |
루비 | 불완전 |
Scheme | 불완전 |
Span | 불완전 |
Tcl (별명 partcl) | 불완전 |
URM | 불완전 |
YAL | 불완전 |
Zork Z-code | 불완전 |
루비 커뮤니티는 패럿에 강한 관심을 보였다. 파이썬 커뮤니티는 JIT 컴파일러 Psyco, 바이트 코드로의 컴파일러 Jython, .NET 플랫폼으로의 컴파일러 IronPython, 고수준 최적화와 정적 코드 생성을 목적으로 하는 PyPy 등이 있기 때문에 주시하는 모습을 보이고 있다.
6. mod_parrot
아파치 웹 서버의 선택적인 모듈이다. 이 모듈은 패럿 가상 머신 인터프리터를 아파치 서버에 내장하고, 패럿 어셈블리 언어 또는 패럿을 대상으로 하는 모든 고급 언어로 작성된 핸들러를 허용하기 위해 아파치 API에 대한 접근을 제공한다.
7. 문화
패럿의 캐치프레이즈는 "하나의 바이트코드는 모든 것을 지배한다"이다. 이는 J. R. R. 톨킨의 The Hobbit|더 호빗영어, The Lord of the Rings|반지의 제왕영어의 핵심 아이템인 "하나의 반지"에 새겨진 문구에서 유래되었다.
개발 논의는 주로 IRC를 통해 이루어지며, 평소에는 irc.perl.org의 #parrot 채널이 사용된다. #parrotsketch 채널에서 매주 패럿 및 언어 개발자를 위한 미팅이 열리며, parrot.org에서 호스팅되는 parrot-dev 메일링 리스트에서도 추가적인 논의가 이루어진다.
패럿의 안정 버전은 매월 셋째 주 화요일에 릴리스된다. 릴리스 작업은 중심 개발자가 교대로 담당하며, 동일한 개발자가 연속해서 릴리스 담당이 되지 않도록 배려하고 있다. 이러한 관습은 프로젝트의 진행 속도와 안정성을 높이는 데 기여하고 있다.
8. 라이선스
자유 소프트웨어 프로젝트이며, 아티스틱 라이선스 버전 2.0에 따라 배포된다.
참조
[1]
웹사이트
New supported release 8.1.0 "Andean Parakeet"
http://www.parrot.or[...]
Parrot Foundation
2016-09-26
[2]
웹사이트
Parrot Contributor License Agreement 1.0
https://web.archive.[...]
Parrot Foundation
2009-03-18
[3]
웹사이트
Parrot Roadmap
https://web.archive.[...]
Parrot Foundation
2008-11-20
[4]
웹사이트
Inactive Parrot {{!}} Parrot VM
http://www.parrot.or[...]
[5]
웹사이트
The Story Behind the Parrot Prank - O'Reilly Media
http://www.oreilly.c[...]
Oreilly.com
2014-02-25
[6]
웹사이트
Programming Parrot
https://web.archive.[...]
Perl.com
2014-02-25
[7]
웹사이트
Corporations Advanced Search
https://ccfs.sos.wa.[...]
2021-04-09
[8]
뉴스
Announcing the Parrot Foundation
http://www.parrotblo[...]
2008-06-29
[9]
웹사이트
Parrot 6.1.0 - Parrot Design Documents (PDDs)
http://docs.parrot.o[...]
Docs.parrot.org
2014-02-25
[10]
웹사이트
reparrot: Parrot has a new architect. What now?
http://reparrot.blog[...]
Reparrot.blogspot.com
2014-02-25
[11]
문서
http://docs.parrot.o[...]
2009-05-09
[12]
웹사이트
Languages - Parrot VM
http://www.parrot.or[...]
parrot.org
2023-11-18
[13]
웹사이트
Languages – Parrot
https://trac.parrot.[...]
Parrot development wiki
2023-11-18
[14]
웹사이트
The Parrot Bytecode (PBC) Format - parrotcode
https://web.archive.[...]
2009-07-15
[15]
문서
http://docs.parrot.o[...]
2009-07-20
[16]
웹사이트
New supported release 8.1.0 "Andean Parakeet"
http://parrot.org/ne[...]
2017-01-20
[17]
웹사이트
Parrot 0.7.0 リリースノート
https://launchpad.ne[...]
2012-01-12
[18]
웹사이트
Parrot TracWiki JITRewrite
http://trac.parrot.o[...]
2012-01-12
[19]
웹인용
New supported release 8.1.0 "Andean Parakeet"
http://www.parrot.or[...]
Parrot Foundation
2016-09-26
[20]
웹인용
Parrot Contributor License Agreement 1.0
http://www.parrot.or[...]
Parrot Foundation
2009-03-18
[21]
웹인용
Parrot Roadmap
https://trac.parrot.[...]
Parrot Foundation
2008-11-20
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com